<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>zavsc | VPN или как открыть порты.</title> 
<meta name="description" content="Кирилл Заволожин"/>
<meta name="theme-color" content="#000"> 
<link rel="icon" type="image/png" sizes="16x16 32x32" href="/favicon.png"/> 
<style>
*{cursor:none!important}#cursor{position:fixed;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none;z-index:10001;transform:translate(-10px,-10px);mix-blend-mode: exclusion;}#cursor::after{content:"";position:absolute;width:10px;height:18px;transform-origin:0 0;transform:translate(-26%,-42%);background-color:var(--c);opacity:0;box-shadow:0 0 0 100px transparent}.m-cursor #cursor::after{opacity:1}#cursor.m-hidden::after{opacity:0}html::-webkit-scrollbar,body::-webkit-scrollbar{display: none;}html,body{-ms-overflow-style: none;scrollbar-width: none;}html, body{scroll-behavior: smooth}body{--c: #69caa8; background: none transparent; color: var(--c); min-width: 375px;}*{font: 400 20px/1.4 monospace; text-transform: uppercase;}a{color: inherit; text-decoration: none;}a:focus-visible, input:focus-visible~.tsel{outline: 2px solid var(--c); outline-offset: 4px;}a:not([href^="#"]),*::selection{background: var(--c); color: #405654;}a:not([href^="#"])::selection{background: #405654; color: var(--c);}pre, code{line-height: normal; font-size: 15px; font-weight: bold;}pre{text-align: center; margin: 0 0 56px;}code{display: inline-block; text-align: left;}main{margin: 0 auto; padding: 32px 16px 56px; max-width: 1024px;}section{position: relative; padding: 20px 0; border-top: 2px dashed; margin: 0 auto; max-width: 700px;}h1, input{border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px;}h1+p{margin-top: 0;}h2{margin: 0 0 1em;}p, ul{margin: 0;}*+p, p+*, *+ul, ul+*{margin-top: 1em;}nav, .tsel{margin: 48px 0; display: grid; grid-template-columns: var(--cols, repeat(auto-fit, minmax(146px, 1fr))); gap: 16px;}.tsel{margin: 1em 0 40px;}nav a, .tsel label{display: block; text-decoration: none; text-align: center; padding: 8px; border: 2px dashed; cursor: pointer;}#t1:checked~* [for=t1], #t2:checked~* [for=t2], #t3:checked~* [for=t3], #t4:checked~* [for=t4]{border: 2px solid;}.tab{display: none;}#t1:checked~#tt1, #t2:checked~#tt2, #t3:checked~#tt3, #t4:checked~#tt4{display: block;}.pr{display: grid; grid-template-columns: repeat(var(--prg, 3), 1fr); gap: 16px; text-align: center;}.g4{--prg: 2;}.pritem{display: flex; flex-direction: column; gap: 8px; padding: 16px; border: 2px solid;}.prhead{display: flex; justify-content: center; gap: 8px; flex-wrap: wrap;}.prhead *+*{text-align: right; flex: 1;}h3{margin: 0;}.prrow{display: flex; justify-content: space-between; gap: 8px;}.prrow div+div{flex: 1; display: flex; gap: 8px;}.prrow div+div::before{content: ''; display: block; flex: 1; border-bottom: 1px dotted; pointer-events: none; transform: translateY(-8px);}.btns{text-align: center; margin-top: 72px; margin-bottom: 24px;}footer{text-align: center; padding: 16px 16px 32px;}@media (max-width:859px){*{font-size: 16px;}pre, code{font-size: 0.8vw;}}@media (max-width:679px){.tsel{--cols: 1fr 1fr;}}@media (max-width:579px){nav{--cols: 1fr;}.pr, .g4{--prg: 1;}}</style>
</head>
<body>
<div id="cursor"></div> 
<main>
<nav><a href="/">Главная</a> <a href="/blog.html">Блог</a> <a href="/projects.html">Мои проекты</a></nav>
<b>VPN или как открыть порты. 07.04.2022</b><br>
<p>
Допустим у нас есть домашний сервер и роутер за NAT и нужно открыть порты.<br>
Покупаем дешёвый VDS сервер  (Например 
FIRSTBYTE тариф MSK-KVM-SSD-START на год 660RUB, промокод refer_105553)<br>
Выбираем ос DEBIAN и после оплаты сервера подключаемся к нему по SSH и пишем следующее:<br>
<code>apt-get update -y && wget https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh && chmod +x openvpn-install.sh && ./openvpn-install.sh</code>
<br>дальше просто жмём enter<br>
<img src="/blog/image.png"><br>
пишем любое имя например vpn<br>
<img src="/blog/image-1.png"><br>
1)<br>
у нас создался файл vpn.ovpn скачиваем программу openvpn connect и импортируем наш файл, подключаемся к впн и находим там YOUR PRIVATE IP см скрин ниже<br>
<img src="/blog/image-2.png"><br>
у меня это 10.8.0.3<br>
на сервере:<br>
<code>
apt install net-tools -y
ifconfig eth0 mtu 1372
iptables -t nat -A PREROUTING -p tcp -d АЙПИ VDS --dport 80 -j DNAT --to-destination 10.8.0.3:ПОРТ
iptables -A FORWARD -i eth0 -d 10.8.0.3 -p tcp --dport 80 -j ACCEPT
</code>
(eth0 замените на своё, чтобы узнать какое у вас имя сетевого интерфейса напишите ifconfig и там где написано inet должен быть айпи адрес вашего сервера)<br>
<img src="/blog/image-3.png"><br>
после этого порт открыт<br> 
<img src="/blog/image-4.png"><br>
Допустим вы ещё хотите открыть порты на виртуальной машине (У меня это VIRTUALBOX)<br>
Выключаем вм (если запущена) и переходим в Настроить > сеть<br>
<img src="/blog/image-5.png"><br>
<img src="/blog/vpn-ili-kak-otkryt-porty.png"><br>
прброс портов, <br>
<img src="/blog/image-6.png">
<br>
адрес хоста пишем ip клиента опенвпн 10.8.0.X порт хоста, порт который мы открыли, чтобы узнать адрес гостя включаем вм открываем cmd и пишем ipconfig перед этим установив драйвера если сетевой адаптер вдруг не определился. порт гостя порт который ранее был открыт
<br>
<img src="/blog/image-7.png">
<br>
OK > OK<br>
<img src="/blog/image-8.png"><br>
на этом всё.
</p>
</main> 
<footer> Copyright &copy;&nbsp;2020-2023&nbsp;Кирилл Заволожин. Все права не защищены.</footer> 
<script>document.addEventListener("DOMContentLoaded",(function(){var e,t=document.querySelector("#cursor"),n=!1;t&&(document.body.classList.add("m-cursor"),document.addEventListener("mousemove",(function(e){n||(document.body.classList.add("m-cursor"),t.classList.remove("m-hidden"),t.style.transform="translate(".concat(e.clientX,"px,").concat(e.clientY,"px)"))})),document.querySelector('html').addEventListener("mouseleave",(function(){document.body.classList.remove("m-cursor")})),document.body.addEventListener("touchstart",(function(o){t.classList.add("m-hidden"),clearTimeout(e),n=!0,e=setTimeout((function(){n=!1}),500)})))}));</script><script>document.querySelectorAll('[href^="#"]').forEach(anchor => {anchor.addEventListener('click', (e) => {e.preventDefault();const y = document.querySelector(anchor.getAttribute('href')).getBoundingClientRect().top + window.scrollY;window.scroll({top: y,behavior: 'smooth'});});});</script><script>let c=0, c42=document.querySelector('#c42'), word=[52, 50], press=0; c42.addEventListener('click', (e)=>{c++; if (c===42){lifeDontTalkToMeAboutLife();}}); document.addEventListener('keyup', dontPanic); function dontPanic(e){code=(e.keyCode ? e.keyCode : e.which); if (code===100) code=52; if (code===98) code=50; if (code==word[press] && press < word.length - 1) press++; else if (code==word[press] && press==word.length - 1){lifeDontTalkToMeAboutLife(); document.removeEventListener('keyup', dontPanic);}else{press=0;}}function lifeDontTalkToMeAboutLife(){c42.innerHTML=`<span></span>
`;}</script>
</body>
</html>
